package org.lora.core.mongodb;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;
import org.lora.core.mongodb.impl.MongoDAOImpl;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;

public class Test {

	public static void main(String[] args) {
		
		ServerAddress serverAddress = new ServerAddress("127.0.0.1", 27017);
		
		MongoClientOptions.Builder build = new MongoClientOptions.Builder();

		// 与目标数据库能够建立的最大connection数量为50
		build.connectionsPerHost(50);

		// 如果当前所有的connection都在使用中，则每个connection上可以有50个线程排队等待
		build.threadsAllowedToBlockForConnectionMultiplier(50);
		/*
		 * 一个线程访问数据库的时候，在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
		 * 这里比较危险，如果超过maxWaitTime都没有获取到这个连接的话，该线程就会抛出Exception
		 * 故这里设置的maxWaitTime应该足够大，以免由于排队线程过多造成的数据库访问失败
		 */
		build.maxWaitTime(1000 * 60 * 2);

		// 与数据库建立连接的timeout设置为1分钟
		build.connectTimeout(1000 * 60 * 1);
		
		

		MongoClientOptions options = build.build();
		
		MongoClient mongoClient = new MongoClient(serverAddress, options);
		
		IMongoDAO dao = new MongoDAOImpl(mongoClient);
		
		
		try{
			List<Document> documentList = new ArrayList<Document>();
			
			Document entry = new Document();
			entry.append("resourceId", "001");
			entry.append("resourceData", "111");
			
			documentList.add(entry);
			
			
			//dao.insert("Lora", "aaa", documentList);
			
			//dao.delete("Lora", "aaa", "resourceId", "001");
			
			List<Document> list1 = dao.find("Lora", "aaa", "id", "333");
			
			MongoParamEntity paramEntity = new MongoParamEntity();
			MongoParamEntity updateEntity = new MongoParamEntity();
			
			paramEntity.setFieldName("id");
			paramEntity.setFieldValue("333");
			
			updateEntity.setFieldName("content");
			updateEntity.setFieldValue("adsfasdf");
			
			dao.update("Lora", "aaa", paramEntity, updateEntity);
			
		}catch(Exception e){
			e.printStackTrace();
		}
		

	}

}
